package com.ankicoo.practice.daily;

import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * Description: 1268. 搜索推荐系统
 *给你一个产品数组 products 和一个字符串 searchWord ，products  数组中每个产品都是一个字符串。
 *
 * 请你设计一个推荐系统，在依次输入单词 searchWord 的每一个字母后，推荐 products 数组中前缀与 searchWord 相同的最多三个产品。
 * 如果前缀相同的可推荐产品超过三个，请按字典序返回最小的三个。
 * 请你以二维列表的形式，返回在输入 searchWord 每个字母后相应的推荐产品的列表。
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/search-suggestions-system
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @author : QCYANG
 * @date : 2022/10/27 17:26
 */
public class LC1268 {

    public static List<List<String>> suggestedProducts(String[] products, String searchWord) {
        if (Objects.isNull(searchWord)){
            return new ArrayList<>();
        }
        List<List<String>> result = new ArrayList<>();
        for (int i = 0; i < searchWord.length(); i++) {
            List<String> itemList = new ArrayList<>();
            String search = searchWord.substring(0,i+1);
            for (String product : products) {
                if (product.startsWith(search)){
                    itemList.add(product);
                }
            }
            List<String> collect = itemList.stream().sorted(Comparator.comparing(String::valueOf)).collect(Collectors.toList());
            itemList.clear();

            for (int j= 0;j<collect.size()&&j<3;j++) {
                itemList.add(collect.get(j));
            }
            result.add(itemList);
        }

        return result;
    }

    public static void main(String[] args) {
        String[] products = {"bags","baggage","banner","box","cloths"};
        String searchWord = "bags";
        List<List<String>> lists = suggestedProducts(products, searchWord);

        for (List<String> list : lists) {
            for (String s : list) {
                System.out.print(s+"   ");
            }
            System.out.println("");
        }
    }
}
